package dao

import (
	"time"
)

// 这是 Log 的全局公开dao对象，被service层调用!
var LogDao = logDao{}

// 操作日志表
// 这是 log表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Log struct {
	Id         int32     `json:"id" form:"id" v:"id" db:"id"`
	Admin      string    `json:"admin" form:"admin" v:"admin" db:"admin"`                         // 管理员
	Ip         string    `json:"ip" form:"ip" v:"ip" db:"ip"`                                     // 管理员地址
	Type       int32     `json:"type" form:"type" v:"type" db:"type"`                             // 操作分类
	Action     string    `json:"action" form:"action" v:"action" db:"action"`                     // 操作动作
	Status     int8      `json:"status" form:"status" v:"status" db:"status"`                     // 操作状态
	Result     string    `json:"result" form:"result" v:"result" db:"result"`                     // 操作结果，或者成功消息，或者失败消息
	Comment    string    `json:"comment" form:"comment" v:"comment" db:"comment"`                 // 补充信息
	AddTime    time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`             // 创建时间
	UpdateTime time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"` // 更新时间
	Deleted    int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`    // 逻辑删除

}

// 注意:这是 Log 的私有dao对象，只能在dao层内使用!
type logDao struct {
	InsertTemplate func(arg Log) (int64, error)     //插入一条记录
	UpdateTemplate func(arg Log) (int64, error)     //更新一条记录
	DeleteTemplate func(id int64) (int64, error)    `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Log, error)      `args:"id"` //根据传入的主键获取一条记录
	List           func(arg LogList) ([]Log, error) //模糊分页查询
}

/*
// 这是 log 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type LogPostman struct {
id
admin
ip
type
action
status
result
comment
add_time
update_time
deleted

}*/

// 这是 log 表的批量请求参数
type LogReq struct {
	List []Log `json:"list" form:"list"`
}

// 这是 logDao.List()方法的请求参数
type LogList struct {
	Page
}
